/**
 * 
 */
package com.lifeware.research.endo.models.dao;

import java.util.List;
import java.util.Vector;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.lifeware.research.endo.Constants;
import com.lifeware.research.endo.models.SchedaBaseSummary;
import com.lifeware.research.endo.models.entities.AcromegaliaSchedeBase;
import com.lifeware.research.endo.models.entities.MmPazienteGhiandolaMalattia;

/**
 * <p>Implementa le operazioni possibili sull'entit&agrave; di raccordo tra 
 *    paziente, ghiandola e malattia utilizzando il framework H8.
 * </p>
 * 
 * @author  Riccardo Cardin, (C) 2012 Lifeware
 * @version 1.0
 */
@Repository
public class MmPazienteGhiandolaMalattiaH8Dao extends AbsHibernateDao implements
		IMmPazienteGhiandolaMalattiaDao {

	private static final String FIND_BY_PAZIENTE_IDENTIFICATIVO = 
			"findByPazienteIdentificativo";
	
	@Autowired
	public MmPazienteGhiandolaMalattiaH8Dao(SessionFactory sessionFactory) {
		
		super(sessionFactory);
	}

	/* (non-Javadoc)
	 * @see com.lifeware.research.endo.models.dao.IMmPazienteGhiandolaMalattiaDao#findByPazienteIdentificativo(java.lang.String)
	 */
	@Override
	public List<SchedaBaseSummary> findByPazienteIdentificativo(
			String identificativoPaziente) {
		
		List<SchedaBaseSummary> listaSchedeBase = 
				new Vector<SchedaBaseSummary>();
		
		/* Recupero la sessione */
		Session session = this.sessionFactory.openSession();
		
		@SuppressWarnings("unchecked")
		List<MmPazienteGhiandolaMalattia> results = 
				session.getNamedQuery(FIND_BY_PAZIENTE_IDENTIFICATIVO).
				setString(0, identificativoPaziente).list();
		
		/* Estraggo le informazioni principali */
		SchedaBaseSummary currSchedaBaseSummary = null;
		for (MmPazienteGhiandolaMalattia result : results) {
			
			/* Costruisco l'oggetto riassuntivo */
			currSchedaBaseSummary = this.buildSchedaBaseSummary(result);
			
			/* Aggiungo l'oggetto alla lista */
			listaSchedeBase.add(currSchedaBaseSummary);
			
		}   // for (MmPazienteGhiandolaMalattia result : results)...
		
		/* Chiudo la sessione */
		session.close();
		
		return listaSchedeBase;
	}
	
	/**
	 * <p>Estrae le informazioni riassuntive per una scheda base.
	 * </p>
	 * 
	 * @param result Le informazioni persistite a DB
	 * 
	 * @return Informazioni riassuntive.
	 */
	private SchedaBaseSummary buildSchedaBaseSummary(MmPazienteGhiandolaMalattia result) {
		
		SchedaBaseSummary schedaBaseSummary = null;
		
		/* Informazioni dipendenti dalla malattia */
		Integer meseDiagnosi = null;
		Integer annoDiagnosi = null;
		Integer idMalattia = null;
		
		/* Recupero la malattia */
		String malattia = result.getDescrizioneMalattia();
		switch (malattia) {
		case Constants.ACROMEGALIA_DESCRIZIONE:
			
			AcromegaliaSchedeBase schedaBase = 
				result.getAcromegaliaSchedeBase(); 
			idMalattia = schedaBase.getIdAcroSchedaBase();
			meseDiagnosi = schedaBase.getMeseDiagnosi();
			annoDiagnosi = schedaBase.getAnnoDiagnosi();
			break;
		}   // switch (malattia)...
		
		/* Costruisco il riassunto */
		schedaBaseSummary = 
				new SchedaBaseSummary(idMalattia, 
						              result.getPazienti().getIdPaziente(), 
						              malattia, 
						              result.getGhiandole().getDescrizione(), 
						              meseDiagnosi, 
						              annoDiagnosi);
		
		return schedaBaseSummary;
	}

}
